package cn.juque.lucenecandy.core.handlers.metaobject.impl;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.juque.common.constants.YesOrNoEnum;
import cn.juque.lucenecandy.bo.FieldBO;
import cn.juque.lucenecandy.core.config.LuceneCandyConfig;
import cn.juque.lucenecandy.core.constants.StrConstant;
import cn.juque.lucenecandy.core.enums.FieldFillEnum;
import cn.juque.lucenecandy.core.handlers.metaobject.IMetaObject;

import java.util.Objects;
import java.util.Set;

/**
 * @author juque
 * @version 1.0.0
 * <ul>
 *     <li>VisibleMetaObject</li>
 * </ul>
 * @date 2024-01-11
 **/
public class VisibleMetaObject implements IMetaObject {

    /**
     * 具体填充逻辑
     *
     * @param fillEnum  操作
     * @param entity    实体类
     * @param fieldName 变量名称
     * @param fieldBO   变量信息
     */
    @Override
    public void invoke(FieldFillEnum fillEnum, Object entity, String fieldName, FieldBO fieldBO) {
        Set<FieldFillEnum> fillEnums = fieldBO.getFills();
        if (!StrConstant.VISIBLE.equals(fieldName) || Objects.isNull(entity) || CollUtil.isEmpty(fillEnums)) {
            return;
        }
        if (!FieldFillEnum.INSERT.equals(fillEnum) && !FieldFillEnum.UPDATE.equals(fillEnum)) {
            return;
        }
        ReflectUtil.setFieldValue(entity, fieldName, YesOrNoEnum.YES.getCode());
//        LuceneCandyConfig luceneCandyConfig = SpringUtil.getBean(LuceneCandyConfig.BEAN_ID);
//        boolean flag = Boolean.TRUE.equals(luceneCandyConfig.getDataSyncEnable())
//                && StrConstant.TCC.equals(luceneCandyConfig.getDataSync());
//        // TCC形式，统一为隐藏
//        if (flag) {
//            ReflectUtil.setFieldValue(entity, fieldName, YesOrNoEnum.NO.getCode());
//        } else {
//        }
    }
}
